11051
4757
Mi a leggyorsabb módszer a java.nio.ByteBuffer a átalakítására egy (újonnan létrehozott) CharBuffer b vagy char [] b formátumra.
Ezzel fontos, hogy a [i] == b [i]. Ez azt jelenti, hogy nem egy [i] és egy [i + 1] alkot egy b [j] értéket, amit a getChar (i) tenne, hanem az értékeket "el kell terjeszteni".
bájt a [] = {1,2,3, 125,126,127, -128, -127, -126} // mindegyik bájt (aláírva)
char b [] = {1,2,3, 125,126,127, 128, 129, 130} // mindegyik egy char (amelyek nincsenek aláírva)
Vegye figyelembe, hogy a -128 bájtnak ugyanazok az (alsó 8) bitje van, mint a char: 128-nak. Ezért feltételezem, hogy a "legjobb" értelmezés az lenne, ahogy fentebb megjegyeztem, mert a bitek ugyanazok.
Ezt követően szükségem van fordítva: A char [] vagy a java.nio.CharBuffer leghatékonyabb módja egy java.nio.ByteBuffer fájlba. 
Tehát, amit szeretne átalakítani az ISO-8859-1 kódolással.
Nem állítok semmit a hatékonyságról, de legalább elég rövid megírni:
CharBuffer eredmény = Charset.forName ("ISO-8859-1"). Dekódolás (byteBuffer);
A másik irány a következő lenne:
ByteBuffer eredmény = Charset.forName ("ISO-8859-1"). Kódolás (charBuffer);
Kérjük, mérje ezt össze más megoldásokkal. (Hogy igazságos legyek, a Charset.forName részt nem szabad belefoglalni, és csak egyszer kell megtenni, nem minden pufferhez.)
A Java 7-es verziótól kezdve a StandardCharsets osztály is van előre megpéldázott Charset-példányokkal, így használhatja
CharBuffer eredmény = StandardCharsets.ISO_8859_1.decode (byteBuffer);
és
ByteBuffer eredmény = StandardCharsets.ISO_8859_1.encode (charBuffer);
helyette. (Ezek a sorok ugyanúgy járnak el, mint korábban, csak a megkeresés könnyebb, és nincs kockázat a nevek hibás beírásával, és nem kell kifogni a lehetetlen kivételeket.)
|
Egyetértek a @ Ishtar's-szal, javaslom, hogy egyáltalán ne kerüljön áttérésre egy új struktúrára, és csak akkor konvertáljon, amire szüksége van.
Ha azonban van egy halom ByteBuffer-je, megteheti.
ByteBuffer bb = ...
bájt [] tömb = bb.array ();
char [] karakterek = új char [bb.remaining ()];
for (int i = 0; i